package com.jobpass.jobpass_common_web;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;

public class MybatisUtils {
    public static void main(String[] args) {

        //1.创建代码生成器
        AutoGenerator atg = new AutoGenerator();

        //2.添加全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir"); //获取项目路径
        gc.setOutputDir(projectPath + "/src/main/java"); //在xx目录下生成
        gc.setAuthor("jobpass"); //作者
        gc.setOpen(false); // 是否打开文件资源管理器
        gc.setFileOverride(true);//是否覆盖
        // 自定义文件命名，注意 %s 会自动填充表实体属性！
        gc.setControllerName("%sController");
        gc.setServiceName("%sService");
        gc.setIdType(IdType.AUTO);//设置主键生成策略 默认为雪花算法
        gc.setDateType(DateType.ONLY_DATE);  // 时间格式
        gc.setSwagger2(true);//swagger
        atg.setGlobalConfig(gc);
        //3.配置数据源
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://59.110.173.13:3306/jz?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC");
        // dsc.setSchemaName("com");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setDbType(DbType.MYSQL);
        atg.setDataSource(dsc);
        //4.配置包
        PackageConfig pgc = new PackageConfig();
//            pgc.setModuleName("blog");//模块名
        pgc.setParent("com.jobpass.common");// 合并模块名为 com.zjj.blog
        pgc.setEntity("model"); //实体类包
        pgc.setMapper("mapper"); // dao，mapper包名
        pgc.setController("route"); //route 包名
        pgc.setService("service");
        pgc.setServiceImpl("impl");
        atg.setPackageInfo(pgc);
        //5.策略配置
        StrategyConfig sf = new StrategyConfig();
        sf.setInclude("admin",
                "employment",
                "enterprise",
                "faculty",
                "grade",
                "journalism",
                "major",
                "monthly",
                "practice",
                "recruit",
                "role",
                "score",
                "sign",
                "student",
                "teacher",
                "user"
        ); // 设置要映射的表名
        sf.setNaming(NamingStrategy.underline_to_camel);//包的命名规范 下换线转驼峰
        sf.setColumnNaming(NamingStrategy.underline_to_camel);//列名也支持 下划线转驼峰
        sf.setEntityLombokModel(true);//是否开启lombok注解支持
        //逻辑删除
        //sf.setLogicDeleteFieldName("deleted");
        //自动填充
        TableFill gmt_create = new TableFill("creat_time", FieldFill.INSERT);//自动填充 数据库字段gmt_create自动填充
        TableFill gmt_insert = new TableFill("update_time", FieldFill.INSERT_UPDATE);//自动填充 数据库字段gmt_insert自动填充和更新
        ArrayList<TableFill> tableFillList = new ArrayList<>();
        tableFillList.add(gmt_create);
        tableFillList.add(gmt_insert);
        sf.setTableFillList(tableFillList);
        //乐观锁
//        sf.setVersionFieldName("version");

        sf.setRestControllerStyle(true); // controller开启驼峰命名
        sf.setControllerMappingHyphenStyle(true); //controller的url也开启
        atg.setStrategy(sf);

        //执行
        atg.execute();


    }

}
